/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package villapancha2011;

import java.util.List;
import java.util.LinkedList;
import java.util.Random;

import org.javahispano.javacup.modelo.*;

/**
 *
 * @author Jorgeao
 */
public class Ataque extends VillaPanchaBase {

    class ZonaAtaque {
        public Posicion p1,p2;
        public Grosso jugadorAtacando; 
    }
    
    LinkedList<ZonaAtaque> zonas = new LinkedList<ZonaAtaque>();

    public Ataque(TacticaVillaPancha2011 t) {
        super(t);

        ZonaAtaque z = new ZonaAtaque();
        z.p1 = Constantes.cornerSupIzq.moverPosicion(10, -10);
        z.p2 = Constantes.cornerSupIzq.moverPosicion(Constantes.ANCHO_CAMPO / 3, - 30);
        z.jugadorAtacando = Grosso.Josexo;
        zonas.add(z);

        z = new ZonaAtaque();
        z.p1 = Constantes.cornerSupIzq.moverPosicion(Constantes.ANCHO_CAMPO / 3, - 10);
        z.p2 = Constantes.cornerSupIzq.moverPosicion((Constantes.ANCHO_CAMPO * 2) / 3, - 45);
        z.jugadorAtacando = Grosso.Montico;
        zonas.add(z);

        z = new ZonaAtaque();
        z.p1 = Constantes.cornerSupIzq.moverPosicion((Constantes.ANCHO_CAMPO * 2) / 3, - 10);
        z.p2 = Constantes.cornerSupIzq.moverPosicion(Constantes.ANCHO_CAMPO - 10, - 30);
        z.jugadorAtacando = Grosso.Costilla;
        zonas.add(z);

        // Temp, revisar

        z = new ZonaAtaque();
        z.p1 = Constantes.cornerSupIzq.moverPosicion(10, - 25);
        z.p2 = Constantes.cornerSupIzq.moverPosicion(Constantes.ANCHO_CAMPO / 2, - 45);
        z.jugadorAtacando = Grosso.Bochae;
        zonas.add(z);

        z = new ZonaAtaque();
        z.p1 = Constantes.cornerSupIzq.moverPosicion(Constantes.ANCHO_CAMPO / 2, - 25);
        z.p2 = Constantes.cornerSupIzq.moverPosicion(Constantes.ANCHO_CAMPO - 10, - 45);
        z.jugadorAtacando = Grosso.Pela;
        zonas.add(z);

    }


    public void atacar() {
        if (tactica.posesionActual == Posesion.Defendiendo)
        {
            for (ZonaAtaque zona:zonas) {
                // TODO: hacer que los mediocampistas no ataquen
                // zona.jugadorAtacando = Grosso.Ninguno;
            }
        } else {
            // TODO: hacer que mediocampistas tomen las zonas libres
            // dependiendo de cuantos defensas hayan? de tiempo atacando? de donde esta la pelota??

            for (ZonaAtaque zona:zonas) {
                // Calculo la posicion mas desmarcada en la zona
               // Posicion jugadorPos = situacionPartido().misJugadores()[zona.jugadorAtacando.ordinal()];
                double distanciaMaximaZona = 0;
                Posicion puntoDistanciaMaximaZona = zona.p1;
                for (int x=(int)zona.p1.getX(); x<zona.p2.getX(); x=x+3) {
                    for (int y=(int)zona.p1.getY(); y>zona.p2.getY(); y=y-3) {
                        
                        if (false && tactica.receptorUltimoPase != Grosso.Ninguno)
                        {
                            if (tactica.pase.esPasePorBajoSeguro(situacionPartido().misJugadores()[
                                tactica.receptorUltimoPase.ordinal()], zona.jugadorAtacando))
                            {
                                Posicion posObjetivo = new Posicion(x, y);

                                tactica.estrategia.setPosicionParaUbicarse(zona.jugadorAtacando, posObjetivo);
                                return;
                            }
                        }
                        
                        double distanciaRivalMasCercano = 1000;
                        Posicion posObjetivo = new Posicion(x, y);
                        for (Posicion rivalPos:situacionPartido().rivales()) {
                            double dist = rivalPos.distancia(posObjetivo);
                            if (distanciaRivalMasCercano > dist) {
                                distanciaRivalMasCercano = dist;
                            }
                        }
                        if (distanciaRivalMasCercano > distanciaMaximaZona) {
                            distanciaMaximaZona = distanciaRivalMasCercano;
                            puntoDistanciaMaximaZona = posObjetivo;
                        }
                        
                    }
                }
                tactica.estrategia.setPosicionParaUbicarse(zona.jugadorAtacando, puntoDistanciaMaximaZona);
            }

        }



    }

}

